﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MIAP.DataAccess.Interfaces;
using MIAP.Entidades;

namespace MIAP.Negocio
{
    public class AdministrarPerfilesNegocio
    {
        /// <summary>
        /// Instancia para el acceso a datos de Administración de Perfiles.
        /// </summary>
        private readonly IPerfilesDao daoPerfiles;

        /// <summary>
        /// Instancia para el acceso a datos de Permisos.
        /// </summary>
        private readonly IPermisosDao daoPermisos;

        #region Constructor

        /// <summary>
        /// Inicializa una nueva instancia <see cref="AdministrarPerfilesNegocio"/>
        /// </summary>
        public AdministrarPerfilesNegocio()
        {
            this.daoPerfiles = DataAccessFactory.Instance.CreatePerfilesDao();
            this.daoPermisos = DataAccessFactory.Instance.CreatePermisosDao();
        }

        #endregion

        #region Metodos

        /// <summary>
        /// Obtiene la información de todos los perfiles.
        /// </summary>
        /// <returns>Lista con la información de todos los perfiles.</returns>
        public List<PerfilInfo> GetPerfiles()
        {
            List<PerfilInfo> listaPerfil = this.daoPerfiles.GetPerfiles().ToList();

            return listaPerfil;
        }

        /// <summary>
        /// Obtiene la información del perfil de acuerdo a los filtros (idproyecto, nombre, estatus).
        /// </summary>
        /// <param name="idProyecto">id del proyecto.</param>
        /// <param name="nombrePerfil">Nombre del perfil.</param>
        /// <param name="estatus">Estatus del perfil.</param>
        /// <returns>Lista con la información de los perfiles obtenidos de acuerdo a los filtros.</returns>
        public List<PerfilInfo> GetPerfil(int? idProyecto, string nombre, bool? estatus)
        {
            return this.daoPerfiles.GetPerfil(idProyecto, nombre, estatus).ToList();
        }

        /// <summary>
        /// Obtiene la información de un perfil dependiendo del id.
        /// </summary>
        /// <param name="idPerfil">Es el id del perfil del cual se obtendrá la información.</param>
        /// <returns>Información del perfil.</returns>
        public PerfilInfo GetPerfilById(int idPerfil)
        {
            return this.daoPerfiles.GetPerfilById(idPerfil);
        }

        /// <summary>
        /// Cambia el estatus del perfil  
        /// </summary>
        /// <param name="idPerfil">id del perfil a cambiar el estatus</param>
        /// <param name="estatus">true si se requiere activar false en caso contrario</param>
        public void ChangeEstatusPerfil(int idPerfil, bool estatus)
        {
            this.daoPerfiles.ChangeEstatusPerfil(idPerfil, estatus);
        }

        /// <summary>
        /// Obtiene los permisos del perfil especificado
        /// </summary>
        /// <param name="idPerfil">id del perfil del que requieren los permisos</param>
        /// <returns>IList<PermisoInfo></returns>
        public List<PermisoInfo> GetPermisosPorPerfil(int idPerfil)
        {
            return this.daoPermisos.GetPermisos(idPerfil).ToList();
        }

        /// <summary>
        /// Obtiene los perfiles existentes.
        /// </summary>
        /// <returns>Lista con el id y el nombre de los perfiles.</returns>
        public List<CatalogoInfo> GetCatalogPerfiles(int? idProyecto)
        {
            List<CatalogoInfo> listPerfiles;

            listPerfiles = this.daoPerfiles.GetCatalogPerfiles(idProyecto).ToList();

            return listPerfiles;
        }

        #endregion
    }
}
